package com.han.hotelplat.comm.utils;

import java.text.DecimalFormat;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.han.hotelplat.comm.Config;

public class MsgHelp {

	  //产品名称:云通信短信API产品,开发者无需替换
    static final String product = "Dysmsapi";
    //产品域名,开发者无需替换
    static final String domain = "dysmsapi.aliyuncs.com";

    // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
    static final String accessKeyId = "LTAIEzjSzHHmZE5a";
    static final String accessKeySecret = "jhar0vnxwEBaxHnVtAxMg3gW62uTZX";
   
    /**
     * 模版类型:
		短信通知
		模版名称:
		通知完善资料-副本
		模版CODE:
		SMS_134322624
		模版内容:
		您好，感谢您注册${sysName}，为了保证您能及时报名酒店发布的任务，并在任务完成后通过App快速提现，请登录${appName}完善资料。如有疑问，请致电客服热线${phone}
		申请说明:
		通知帮工完善资料
     */
    public static SendSmsResponse noticeEm(String phone) throws ClientException{
    	return sendMsg(phone,"SMS_134322624","{\"sysName\":\""+Config.sysName
    			+"\" , \"appName\":\""+Config.sysName+"\" ,\"phone\":\""+Config.servicePhone+"\"  }", 1);
    }
    
    /**
     * 模版类型:
			短信通知
			模版名称:
			帮工退出任务
			模版CODE:
			SMS_133261188
			模版内容:
			${name}，您好，帮工${emName}退出了您的任务${code}，请登录${sysName}查看详情。
			申请说明:
			帮工退出任务时通知酒店管家
    	 * @description	
    	 * @author  han1088
    	 * @param phone
    	 * @param hmName
    	 * @param emName
    	 * @param taskid
    	 * @return
     * @throws ClientException 
     */
    public static SendSmsResponse sendEmExitTask(String phone, String hmName, String emName,String taskid) throws ClientException{
    	return sendMsg(phone,"SMS_133261188","{\"name\":\""+hmName+"\" , \"emName\":\""+emName
    			+"\" , \"code\":\""+taskid+"\" ,\"sysName\":\""+Config.sysName+"\"  }", 2);
    }
    
    /**
     * 模版类型:
		短信通知
		模版名称:
		无人报名取消任务-副本
		模版CODE:
		SMS_133261185
		模版内容:
		${name}，您好，您的任务${code}因超时无人报名自动取消，请登录${sysName}查看详情。
		申请说明:
		任务超时无人报名取消使用
     * @throws ClientException 
     */
    public static SendSmsResponse sendTimeoutTask(String phone,String hmName, String taskid) throws ClientException{
    	return sendMsg(phone,"SMS_133261185","{\"name\":\""+hmName+"\" , \"code\":\""+taskid+"\" ,\"sysName\":\""+Config.sysName+"\"  }", 2);
    
    }
    
    /**
     * 模版类型:
		短信通知
		模版名称:
		酒店审核未通过通知
		模版CODE:
		SMS_113195010
		模版内容:
		${name}，您好，您的酒店资料未通过审核，请登录${sysName}查看详情。如有疑问请拨打客服热线${sPhone}。
		申请说明:
		酒店审核未通过时，通知酒店管家
     * @throws ClientException 
     */
    public static SendSmsResponse sendAuthHotelNoPass(String phone,String hmName) throws ClientException{
    	return sendMsg(phone,"SMS_113195010","{\"name\":\""+hmName+"\" ,\"sysName\":\""
    				+Config.sysName+"\" ,\"sPhone\":\""+Config.servicePhone+"\"  }", 2);
    }
    
    /**
     * 模版类型:
		短信通知
		模版名称:
		酒店审核通过通知
		模版CODE:
		SMS_113180085
		模版内容:
		${name}，您好，您的酒店资料已经通过审核，请登录${sysName}查看详情。
		申请说明:
		酒店资料审核通过时，通知酒店管家
     * @throws ClientException 
     */
    
    public static SendSmsResponse sendAuthHotelPass(String phone,String hmName) throws ClientException{
    	return sendMsg(phone,"SMS_113180085","{\"name\":\""+hmName+"\" ,\"sysName\":\""
    				+Config.sysName+"\"  }", 2);
    }
    
    
    /**
     * 模版类型:
	短信通知
	模版名称:
	账号冻结通知
	模版CODE:
	SMS_133261163
	模版内容:
	${name}，您好，您的账号违规已被冻结，将无法登陆。如有疑问请拨打客服热线${sPhone}。
	申请说明:
	冻结账号时通知用户
     */
    
    public static SendSmsResponse sendAuthUserStop(String phone,String hmName, Integer userType) throws ClientException{
    	return sendMsg(phone,"SMS_133261163","{\"name\":\""+hmName+"\" ,\"sPhone\":\""+Config.servicePhone+"\"  }", userType);
    }
    
    /**
     * 模版类型:
		短信通知
		模版名称:
		酒店取消任务to帮工
		模版CODE:
		SMS_133276171
		模版内容:
		${name}，您好，您的任务${code}已被酒店取消，请登录${sysName}查看详情。
		申请说明:
		酒店取消任务后通知帮工查看详情
     */
    public static SendSmsResponse sendHotelCancerTask(String phone,String emName, String taskid) throws ClientException{
    	return sendMsg(phone,"SMS_133276171","{\"name\":\""+emName+"\" ,\"code\":\""+taskid+"\" ,\"sysName\":\""
				+Config.sysName+"\"  }", 1);
    }
    
    /**
     * 模版类型:
		短信通知
		模版名称:
		任务完成后通知帮工
		模版CODE:
		SMS_133261266
		模版内容:
		${name}，您好，您的任务${code}已完成，收入金额${sMoney}，请登录${appName}查看详情。
		申请说明:
		任务完成后通知帮工有打款
     */
    public static SendSmsResponse sendHotelFinishTask(String phone,String emName, String taskid, Float money) throws ClientException{
    	DecimalFormat    df   = new DecimalFormat("######0.00"); 
    	return sendMsg(phone,"SMS_133261266","{\"name\":\""+emName
    			+"\" ,\"code\":\""+taskid+"\" ,\"sMoney\":\""+df.format(money)+"\" ,\"appName\":\""
				+Config.sysName+"\"  }", 1);
    }
    
    /**
     * 模版类型:
		短信通知
		模版名称:
		任务被后台强制终止
		模版CODE:
		SMS_133276364
		模版内容:
		&{name},您好，您的任务${code}已截止，收入金额${money}， 请登录${sysname}查看详情。
		申请说明:
		任务被强制终止后通知帮工
     */
    public static SendSmsResponse sendHotelStopTask(String phone,String emName, String taskid, Float money) throws ClientException{
    	DecimalFormat    df   = new DecimalFormat("######0.00"); 
    	return sendMsg(phone,"SMS_133276364","{\"name\":\""+emName
    			+"\" ,\"code\":\""+taskid+"\" ,\"money\":\""+df.format(money)+"\" ,\"sysname\":\""
				+Config.sysName+"\"  }", 1);
    }
    
    
    /**
     * 模版类型:
		短信通知
		模版名称:
		帮工资料审核通过
		模版CODE:
		SMS_133261376
		模版内容:
		${name}，您好，您的资质已经审核通过，请登录${sysName}查看详情。
		申请说明:
		帮工资料审核通过后推送通知 sysName为运用名称
     * 
     */
    public static SendSmsResponse sendAuthEmUserPass(String phone,String emName) throws ClientException{
    	return sendMsg(phone,"SMS_133261376","{\"name\":\""+emName+"\" ,\"sysName\":\""+Config.sysName+"\"  }", 1);
    }
    
    /**
     * 模版类型:
		短信通知
		模版名称:
		帮工审核未通过推送
		模版CODE:
		SMS_133266267
		模版内容:
		${name}，您好，您的资质未通过审核审核，请登录${app}查看详情。如有疑问请拨打客服热线${sPhone}。
		申请说明:
		帮工审核未通过推送
     */
    public static SendSmsResponse sendAuthEmUserNoPass(String phone,String emName) throws ClientException{
    	return sendMsg(phone,"SMS_133266267","{\"name\":\""+emName+"\" ,\"app\":\""+Config.sysName
    			+"\" ,\"sPhone\":\""+Config.servicePhone+"\"  }", 1);
    }
    
    
    /**
     * 模版类型:
		短信通知
		模版名称:
		后台添加帮工
		模版CODE:
		SMS_133276421
		模版内容:
		${name}，您好，系统已为您分配${hName}清洁任务${code}，服务时间${stime}至${etime}，请登录${sysName}查看详情。
		申请说明:
		系统分配任务后通知帮工
     */
    public static SendSmsResponse sendAddEmTask(String phone,String emName,String hotelname, String taskid, String startTime, String endTime) throws ClientException{
    	return sendMsg(phone,"SMS_133276421","{\"name\":\""+emName
    			+"\" ,\"hName\":\""+hotelname
    			+"\" ,\"code\":\""+taskid
    			+"\" ,\"stime\":\""+startTime
    			+"\" ,\"etime\":\""+endTime
    			+"\" ,\"sysName\":\""+Config.sysName+"\"  }", 1);
    }
    
    /**
     * 模版类型:
		短信通知
		模版名称:
		提现驳回
		模版CODE:
		SMS_133261273
		模版内容:
		${name},您好，非常抱歉，您的提现申请未通过，您可以拨打客服热线${sPhone}了解详情
		申请说明:
		提现驳回推送通知
     */
    public static SendSmsResponse sendCashNoPass(String phone,String emName) throws ClientException{
    	return sendMsg(phone,"SMS_133261273","{\"name\":\""+emName
    			+"\" ,\"sPhone\":\""+Config.servicePhone+"\"  }", 1);
    }
    
    /**
     * 
     */
    /**
     * 你的手机验证码是：${code}，五分钟内有效，请勿泄露。如非本人操作，请忽略。
     * @param phone
     * @param checkCode
     * @return
     * @throws ClientException
     */
    public static SendSmsResponse sendCheckCode(String phone,String checkCode, int userType) throws ClientException {
    		return sendMsg(phone,"SMS_109225061","{\"code\":\""+checkCode+"\"}",userType);
    }
    
    
    /**
     * 取消订单to酒店管家
     * 模版类型:
		短信通知
		模版名称:
		取消订单to酒店管家
		模版CODE:
		SMS_113175049
		模版内容:
		${name}，您好，您的订单${code}已被取消，请登录${sysName}查看详情。
		申请说明:
		用户下单，该订单被取消后，通知用户
	 * @param phone 用户手机
     * @param name 管家名字
     * @param orderCode 订单号
     * @return
     * @throws ClientException
     */
   /* public static SendSmsResponse sendOrderCancel(String phone,String name,String orderCode) throws ClientException {
		return sendMsg(phone,"SMS_113175049","{\"name\":\""+name+"\" , \"code\":\""+orderCode+"\" ,\"sysName\":\""+Config.sysName+"\"  }");
    }*/
    
     
  
   /**
    * 接单
    * 
    *  模版类型: 短信通知
    	模版名称: 确认订单to酒店管家-副本
    	模版CODE: SMS_113190010
    	模版内容: 	${name}，您好，您的订单${code}已确认，已按您的要求分配相关清洁任务，请登录${sysName}查看详情。
    	申请说明: 	用户下单，该订单被接单后，通知下单用户。
    * @param phone
    * @param name
    * @param orderCode
    * @return
    * @throws ClientException
    */
    public static SendSmsResponse sendOrderReceive(String phone,String name,String orderCode) throws ClientException {
    		return sendMsg(phone,"SMS_113190010","{\"name\":\""+name+"\" , \"code\":\""+orderCode+"\" ,\"sysName\":\""+Config.sysName+"\"  }", 2);
    }
    
    	  
        /**
         * 
    		
    		模版名称:
服务完成to酒店管家
模版CODE:
SMS_113180076
模版内容:
${name}，您好，清洁人员已经完成今日任务，请登录${sysName}查看详情，如有疑问请拨打客服热线${sPhone}。
         * @param phone 用户手机
         * @param name 用户名称
         * @param orderCode 订单叫什么
         * @return
         * @throws ClientException
         */
    /*public static SendSmsResponse sendOrderServerOk(String phone,String name,String orderCode) throws ClientException {
    		return sendMsg(phone,"SMS_113180076","{\"name\":\""+name+"\" , \"sPhone\":\""+Config.servicePhone+"\" ,\"sysName\":\""+Config.sysName+"\"  }");
    }*/
    
    
    /**
     * 模版名称: 酒店审核通过通知
		模版CODE: SMS_113180085
		模版内容: ${name}，您好，您的酒店资料已经通过审核，请登录${sysName}查看详情。
		申请说明: 酒店资料审核通过时，通知酒店管家
     * @param phone
     * @param name
     * @return
     * @throws ClientException
     */
    /*public static SendSmsResponse sendHotelCheckNoPass(String phone,String name) throws ClientException {
		return sendMsg(phone,"SMS_113180085","{\"name\":\""+name+"\" ,\"sysName\":\""+Config.sysName+"\"  }");
    }*/
    /**
     * 模版名称: 酒店审核未通过通知
		模版CODE: SMS_113195010
		模版内容: ${name}，您好，您的酒店资料未通过审核，请登录${sysName}查看详情。如有疑问请拨打客服热线${sPhone}。
		申请说明: 酒店审核未通过时，通知酒店管家
     * @param phone
     * @param name
     * @return
     * @throws ClientException
     */
    /*public static SendSmsResponse sendHotelCheckPass(String phone,String name) throws ClientException {
		return sendMsg(phone,"SMS_113195010","{\"name\":\""+name+"\" , \"sPhone\":\""+Config.servicePhone+"\" ,\"sysName\":\""+Config.sysName+"\"  }");
    }*/
    
    
    private static SendSmsResponse sendMsg(String phone,String templateCode,String templateParam, int userType)throws ClientException {
    	LogUtil.info("收到短信下行通知：phone="+phone+";templateCode="+templateCode
    			+ "templateParam="+templateParam+";userType="+userType);
        //可自助调整超时时间
        System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
        System.setProperty("sun.net.client.defaultReadTimeout", "30000");

        //初始化acsClient,暂不支持region化
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
        IAcsClient acsClient = new DefaultAcsClient(profile);

        //组装请求对象-具体描述见控制台-文档部分内容
        SendSmsRequest request = new SendSmsRequest();
        //必填:待发送手机号
        request.setPhoneNumbers(phone);//("13126305452");
        //必填:短信签名-可在短信控制台中找到
        if(userType == 2){//酒店端
        	request.setSignName("有人有活酒店端");
        }
        if(userType == 1){//帮工端
        	request.setSignName("有人有活帮工端");
        }
        //request.setSignName("叮咚快洁");
        //必填:短信模板-可在短信控制台中找到
        request.setTemplateCode(templateCode);
        //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
//        request.setTemplateParam("{\"name\":\"Tom\", \"code\":\""+checkCode+"\"}");
        request.setTemplateParam(templateParam);

        //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
        //request.setSmsUpExtendCode("90997");

        //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
//        request.setOutId("yourOutId");

        //hint 此处可能会抛出异常，注意catch
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);

        return sendSmsResponse;
    }

	
}
